import axios from "axios";
import router from "@/router";
import ElementUI from "element-ui";

// 引入nprogress插件
import NProgress from "nprogress";
import "nprogress/nprogress.css";

// 登录
const service = axios.create({
  // baseURL: "/api",
  withCredentials: true, //允许客户端携带认证给服务器 将cookie传递给服务器
  timeout: 10000,
});

// 请求拦截器
service.interceptors.request.use(function (config) {
  NProgress.start(); //进度条出现
  console.log(config);
  let accessPath = ["/users/login", "/users/getCaptcha"];
  // some 函数 只要有一个匹配 就返回true
  let r = accessPath.some((item) => config.url === item);
  if (r) {
    //如果是上面两个请求 则不需要携带token
    return config; //放行
  } else {
    //不是上面两个请求 则需要token
    let token = localStorage.getItem("qq-token");
    config.headers["authorization"] = token;
    return config;
    // authorization 这个token名字 是后端自己定义的
  }
});

// 未登录状态的code是10022 校验失败的状态是1004
// 响应拦截器
service.interceptors.response.use(function (config) {
  console.log(config);
  NProgress.done(); //进度条消失
  // 验证码请求不会被拦截
  // 如果想用状态码是10022  校验状态码是1004就需要跳转登录页

  // 错误
  // if(config.config.url === '/users/getCaptcha'){
  //     return config
  // }else{
  //     if(config.data.code ==='10022' || config.data.code ==='1004'){
  //         ElementUI.Message.error('验证码错误')
  //         router.push('/login')
  //     }
  // }

  let regExp = /^\/users\/verifyCaptcha.+/;
  let { url } = config.config;
  if (url === "/users/getCaptcha" || regExp.test(url) || url === "/login") {
    return config;
  } else {
    // 其他请求响应
    if (config.data.code === "10022" || config.data.code === "1004") {
      ElementUI.Message.error("登录过期,请重新登录");
      localStorage.removeItem("qq-token");
      router.push("/login");
    } else {
      return config;
    }
  }
});
export default service;
